/**
 * zrender: loading特效类
 *
 * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)
 *         errorrik (errorrik@gmail.com)
 */


var util = require('../tool/util');
var TextShape = require('../shape/Text');
var RectangleShape = require('../shape/Rectangle');
var DEFAULT_TEXT = 'Loading...';
var DEFAULT_TEXT_FONT = 'normal 16px Arial';
/**
         * @constructor
         * 
         * @param {Object} options 选项
         * @param {color} options.backgroundColor 背景颜色
         * @param {Object} options.textStyle 文字样式，同shape/text.style
         * @param {number=} options.progress 进度参数，部分特效有用
         * @param {Object=} options.effect 特效参数，部分特效有用
         * 
         * {
         *     effect,
         *     //loading话术
         *     text:'',
         *     // 水平安放位置，默认为 'center'，可指定x坐标
         *     x:'center' || 'left' || 'right' || {number},
         *     // 垂直安放位置，默认为'top'，可指定y坐标
         *     y:'top' || 'bottom' || {number},
         *
         *     textStyle:{
         *         textFont: 'normal 20px Arial' || {textFont}, //文本字体
         *         color: {color}
         *     }
         * }
         */
function Base(options) {
    this.setOptions(options);
}
/**
         * 创建loading文字图形
         * 
         * @param {Object} textStyle 文字style，同shape/text.style
         */
Base.prototype.createTextShape = function (textStyle) {
    return new TextShape({
        highlightStyle: util.merge({
            x: this.canvasWidth / 2,
            y: this.canvasHeight / 2,
            text: DEFAULT_TEXT,
            textAlign: 'center',
            textBaseline: 'middle',
            textFont: DEFAULT_TEXT_FONT,
            color: '#333',
            brushType: 'fill'
        }, textStyle, true)
    });
};
/**
         * 获取loading背景图形
         * 
         * @param {color} color 背景颜色
         */
Base.prototype.createBackgroundShape = function (color) {
    return new RectangleShape({
        highlightStyle: {
            x: 0,
            y: 0,
            width: this.canvasWidth,
            height: this.canvasHeight,
            brushType: 'fill',
            color: color
        }
    });
};
Base.prototype.start = function (painter) {
    this.canvasWidth = painter._width;
    this.canvasHeight = painter._height;
    function addShapeHandle(param) {
        painter.storage.addHover(param);
    }
    function refreshHandle() {
        painter.refreshHover();
    }
    this.loadingTimer = this._start(addShapeHandle, refreshHandle);
};
Base.prototype._start = function () {
    return setInterval(function () {
    }, 10000);
};
Base.prototype.stop = function () {
    clearInterval(this.loadingTimer);
};
Base.prototype.setOptions = function (options) {
    this.options = options || {};
};
Base.prototype.adjust = function (value, region) {
    if (value <= region[0]) {
        value = region[0];
    } else if (value >= region[1]) {
        value = region[1];
    }
    return value;
};
Base.prototype.getLocation = function (loc, totalWidth, totalHeight) {
    var x = loc.x != null ? loc.x : 'center';
    switch (x) {
    case 'center':
        x = Math.floor((this.canvasWidth - totalWidth) / 2);
        break;
    case 'left':
        x = 0;
        break;
    case 'right':
        x = this.canvasWidth - totalWidth;
        break;
    }
    var y = loc.y != null ? loc.y : 'center';
    switch (y) {
    case 'center':
        y = Math.floor((this.canvasHeight - totalHeight) / 2);
        break;
    case 'top':
        y = 0;
        break;
    case 'bottom':
        y = this.canvasHeight - totalHeight;
        break;
    }
    return {
        x: x,
        y: y,
        width: totalWidth,
        height: totalHeight
    };
};
module.exports = Base || module.exports;;